package com.mashibing.api.filter;

import com.mashibing.common.model.StandardSubmit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * @author SNA
 * @date 2025/5/7
 * @Description 策略模式的上下文对象
 **/
@Component
@RefreshScope  // 是 Spring Cloud 提供的一个注解，主要用于支持 配置的热更新。它通常与 Spring Cloud Config 或 Nacos、Apollo 等配置中心 配合使用，使得应用在不重启的情况下能够动态感知并加载最新的配置信息。
public class CheckFilterContext {

    // Spring 的IOC会将对象全部都放在map集合中
    // 基于4.x中Spring提供的泛型注解，基于Map只拿到需要的类型对象即可
    @Autowired
    private Map<String, CheckFilter> checkFiltersMap;

    // @Value 是 Spring 框架提供的一个注解，用于从配置文件中注入属性值到 Spring 管理的 Bean 中
    // 基于nacos获取到执行的顺序和需要执行的校验对象
    @Value("${filters:apikey,ip,sign,template}")
    private String filters;

    /**
     * 当前check方法用于管理校验链的顺序
     * @param submit
     */
    public void check(StandardSubmit submit) {
        // 将获取到的filters基于逗号“，”做切分
        String[] filterArray = filters.split(",");
        // 2. 遍历数组即可
        for (String filter : filterArray) {
            CheckFilter checkFilter = checkFiltersMap.get(filter);
            checkFilter.check(submit);
        }
    }
}
